#ifndef __BOARD_H__
#define __BOARD_H__

typedef struct tag_grid
{
  int rows, columns, length;
  int **grid;
  int *array;
  struct tag_grid *next;
} grid;

grid* pop_grid();

void push_grid(grid * g);

void init_grid(grid *g);

void cleanup_unused_grids();

void copy_into(grid *from, grid *to);

grid* copy(grid *g);

void print_grid(grid *g, int width, int height);


void move_left(grid *g);

void move_right(grid *g);

void move_up(grid *g);

void move_down(grid *g);


// Eval functions
int smoothness1(grid *g);

int monotonicity1(grid *g);

int empty_count(grid *g);

int max_value(grid *g);

#endif
